package com.emin.platform.subjectcenter.vo;

import com.emin.base.exception.EminException;
import com.emin.platform.subjectcenter.common.response.ResponseBack;
import com.emin.platform.subjectcenter.entity.Ecm;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import static com.emin.platform.subjectcenter.exception.ExceptionCode.*;

/**
 * 主体接口请求参数Vo
 *
 * @author Jack
 * @version V1.0
 * @Title:
 * @Description: 主体接口请求参数Vo
 * @date 2017/10/25 11:15
 */
@Data
public class EcmRequestVo extends BaseVo {

    private static Logger LOGGER = LoggerFactory.getLogger(EcmRequestVo.class);

    /*主体名称*/
    private String name;
    /*主体行业*/
    private String industryIds;
    /*主体编号*/
    private String sn;
    /*主体的图标*/
    private String logo;
    /*主体地址*/
    private String address;
    /*主体描述*/
    private String describe;
    /*主体名称或者主体编号，用于模糊查询*/
    private String keyword;

    /**
     * 将vo转换成实体类
     *
     * @return
     */
    @JsonIgnore
    public Ecm convert(Boolean isActivate, Ecm ecm) {
        if (null == ecm) {
            ecm = new Ecm();
        }
        if (this.id != null) {
            ecm.setId(this.id);
        }
        if (!StringUtils.isBlank(logo)) {
            ecm.setLogo(this.logo);
        }
        if (!StringUtils.isBlank(this.name)) {
            ecm.setName(this.name);
        }
        // 激活后主体代码不能编辑
        if (!StringUtils.isBlank(this.sn)) {
            if (null != isActivate && isActivate) {
                ecm.setSn(this.sn);
            } else {
                ecm.setSn(this.sn + this.uniqueSuffix());
            }
        }
        if (!StringUtils.isBlank(address)) {
            ecm.setAddress(this.address);
        }
        if (!StringUtils.isBlank(describe)) {
            ecm.setDescribe(this.describe);
        }
        return ecm;
    }

    /**
     * 获取主体编码唯一后缀
     *
     * @return .ResponseBack<java.lang.Boolean>
     * @throws
     * @Description:
     * @author Jack
     * @date 2017/10/25
     */
    @JsonIgnore
    private String uniqueSuffix() {
        return String.valueOf(System.currentTimeMillis());
    }

    /**
     * 主体请求参数校验
     *
     * @return .ResponseBack<java.lang.Boolean>
     * @throws
     * @Description:
     * @author Jack
     * @date 2017/10/25
     */
    @JsonIgnore
    public ResponseBack<Boolean> validate() {
        // 如果是新增才进行校验
        if (null == this.id) {
            // 新增时主体名称不能为空
            if (StringUtils.isBlank(this.name)) {
                throw new EminException(ECM_NAME_NULL.getCode());
            }
            // 新增时主体行业不能为空
            if (StringUtils.isBlank(this.industryIds)) {
                throw new EminException(ECM_INDUSTRYIDS_NULL.getCode());
            }
            // 新增时主体编号不能为空
            if (StringUtils.isBlank(this.sn)) {
                throw new EminException(ECM_SN_NULL.getCode());
            }
        }
        return null;
    }
}
